package com.tedu.api.io;

import com.sun.xml.internal.ws.wsdl.writer.document.StartWithExtensionsType;
import org.junit.Test;

import java.io.File;
import java.io.IOException;

/**
 * 包位置：java.io
 * File   表示 文件或者文件夹【存在硬盘】
 * 测试：io包下创建文件
 * 验证项目下是否存在demo.txt  文件
 * 创建File文件类
 * File file=new File(”传入路径“)
 * 构造器：传入路径：  /   \   表示路径
 * /    表示路径、文件下载【本地】---测试
 * \    表示路径、文件上传【服务器】---网络     √
 * File文件/文件夹类可以做什么：【常用方法】
 * 1.查看文件或者文件夹的属性信息（名字，大小，判断文件是否存在 等）
 * 2.操作文件或者文件夹（创建，删除等）
 * 3.访问一个目录的子项（访问文件夹下的文件夹操作）
 */
public class FileAPI {
    @Test
    public void testFile() {
        //项目结构：C/S架构----Maven----查路径----通过Idea查路径【准】
        //找到需要查找文件/文件-----右键-----打开于----Explorer
        //src\main\java\com\tedu\api\io     char  c=‘\\’转译成路径：\
        //编写Java代码--任何操作平台运行---路径----封装：静态属性
        //Java编写---File.separator   静态属性可以在任何平台上转译成对应路径

        File file = new File("s" +
                "rc" + File.separator + "m" +
                "ain" + File.separator + "j" +
                "ava" + File.separator + "c" +
                "om" + File.separator + "t" +
                "edu" + File.separator + "a" +
                "pi" + File.separator + "i" +
                "o" + File.separator + "d" +
                "emo.txt");
        //验证：demo.txt文件是否存在
        boolean b = file.exists();
        System.out.println("测试demo.txt文件是否存在" + b);
    }

    /**
     * 针对文件操作方法
     * getName()   获取文件/文件夹的名字【注意：不管file是否存在，只会拿名】
     * length()   返回值：long
     * 返回当前文件的大小（字节量）----汉字：3个字节量
     * exists()   返回值 boolean
     * 判断file文件是否存在，存在true
     */
    @Test
    public void testGLE() {
        File file = new File("s" +
                "rc" + File.separator + "m" +
                "ain" + File.separator + "j" +
                "ava" + File.separator + "c" +
                "om" + File.separator + "t" +
                "edu" + File.separator + "a" +
                "pi" + File.separator + "i" +
                "o" + File.separator + "d" +
                "emo.txt");
        String str = file.getName();
        System.out.println("file文件名字是：" + str);
        long length = file.length();
        System.out.println("文件的字节量是多少：" + length);
    }

    /**
     * 操作文件或者文件夹（创建，删除）
     * createNewFile()
     * 创建新文件，创建不成功，如果不成功抛出异常  IO流异常
     */
    @Test
    public void testCreateNewFile() throws Exception {
        //需求：用程序创建一个文件：text.txt
        File file = new File("." + File.separator + "text.txt");
        //创建一个text.txt文件---判断当前文件夹下是否存在，，存在---不创建
        //                                            不存在---创建
        if (!file.exists()) {
            //text.txt文件不存在
            //创建文件
            System.out.println("文件不存在");
            file.createNewFile();
            System.out.println("文件创建完毕");
        } else {
            System.out.println("文件存在,别创建");
        }
    }

    /**
     * 拓展：存放文件位置：Maven项目：main  程序入口
     * test  程序测试
     * 查找：main下或者test下，必须从src位置开始找
     * -------------------------------------
     * .   代表当前项目下
     */
    @Test
    public void testPath() throws IOException {
        //FileAPI.java相对于项目名“API”下
        File file = new File("." + File.separator + "1");
        //查看file路径
        // System.out.println(file.getCanonicalPath());
        System.out.println("API项目路径下文件是否存在" + file.exists());
    }

    /**
     * 文件删除操作
     * delete()
     * 删除已经创建完毕的文件
     */
    @Test
    public void testDelete() {
        //创建File文件
        File file = new File("." + File.separator + "text.txt");
        // 删除   如果有文件 删除   没有   不删
        if (file.exists()) {
            System.out.println("有文件");
            file.delete();
            System.out.println("文件删除成功~");
        } else {
            System.out.println("没有文件，不删除");
        }
    }

    /**
     * mkdir()
     * 在当前项目下创建一个[目录：文件夹]
     * 创建多层【目录：文件夹】
     * 提升：删除demo下所有文件夹？
     */
    @Test
    public void testMkdir() {
        //创建文件夹---demo文件夹---创建在API文件夹下demo文件夹
        File file = new File("." + File.separator + "demo" +
                "" + File.separator + "abc" + File.separator + "bcd");
        //创建文件夹---如果没有文件夹  创建|有   不创建
        if (!file.exists()) {
            System.out.println("没有文件夹");
            //file.mkdir(); 创建一个文件夹
            file.mkdirs();   //创建多个文件夹
            System.out.println("创建成功~");
        } else {
            System.out.println("已经存在，无需创建");
        }
    }

    @Test
    public void testDelete1() {
        File file = new File("." + File.separator + "demo" +
                "" + File.separator + "abc" + File.separator + "bcd");
        if (file.exists()) {
            System.out.println("");
            //删除多个文件夹
            file.delete();
            System.out.println("");
        } else {
            System.out.println("");
        }
    }
    /**
     * isDirectory（）   判断是否是目录，返回ture
     * isFile()     判断是否是文件，返回true
     * listFiles    返回值：数组----File[]
     * 获取当前目录下所有的子项【包含：文件 、文件夹】
     */
    @Test
    public void testListFiles(){
        //需求：获取当前“API”文件夹  下  所有的文件、文件类
        File file=new File(".");
        //获取文件夹
        if (file.isDirectory()){
            //获取文件夹的子项
           File[] files= file.listFiles();
            //打印获取文件夹名称
            for (int i=0; i<files.length;i++){
                System.out.println(files[i]);
            }
        }
    }
}
